home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 9338 < prev    next >
Encoding:
Text File  |  1996-08-05  |  3.0 KB  |  85 lines

  1. Path: ts1-020.jaxnet.com!user
  2. From: garyg@jax.jaxnet.com (Gary M. Greenberg)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Command line arguments
  5. Date: Sat, 09 Mar 1996 11:33:07 -0500
  6. Organization: Southeast Network Services, Inc.
  7. Message-ID: <garyg-0903961133070001@ts1-020.jaxnet.com>
  8. References: <4hjmpi$cuc_003@res-hall.nwu.edu>
  9. NNTP-Posting-Host: ts1-020.jaxnet.com
  10.  
  11. In article <4hjmpi$cuc_003@res-hall.nwu.edu>, sen@nwu.edu (Subhro K. Sen) wrote:
  12.  
  13. >  I want to pass a filename to a C program for reading (and or writing).
  14. >  How do I grab this command line argument from within the program?
  15. >  
  16. >  Thanks!
  17.  
  18. Subhro, here is some guideance ...
  19.  
  20.     if (you write the program yourself)
  21.         Success;
  22.     else
  23.         (you'll never learn to program);
  24.  
  25. The following is _NOT_ written in C but should assist you.
  26. Assume "X" has been '#defined' as some integer value.
  27.  
  28. You will need to #include <stdio.h>
  29.  
  30. You will need a pointer for reading and/or writing the file.
  31. e.g.:
  32.     FILE *rfp, *wfp; /* *rfp ->> Read File Ptr., *wfp ->> Write File Ptr. */
  33.  
  34. Your invocation of main should include 2 variables:
  35.  /* argc and argv are typical names for these 2 variables */
  36.     "int main(int argc, char **argv)"
  37.         _OR_
  38.     "int main(int argc, char *argv[X])"
  39.  
  40. you should check that the correct number of arguments were entered:
  41.     if(argc!=X) _OR_ if(argc<X) depending on the number of args needed.
  42.  
  43. do something if the number of arguments is wrong.
  44.  
  45. declare a variable to hold the character string entered on the command line:
  46. char *yourString[X]; or char **yourString;
  47.  
  48. I prefer the latter; if used that way, you'll also need to #include <stdlib.h>
  49. and use malloc to allocate the needed space for the file name.
  50.     e.g.:
  51.         /* N == index into argv[X] for the filename */
  52.         yourString=malloc(strlen(argv[N]));
  53.  
  54. Check that the return value of malloc is _not_ NULL. In _one_ statement ...
  55.         if((yourString=malloc(strlen(argv[N])))==NULL) {
  56.             /* handle the error */
  57.         }
  58.         /* else do your thing... */
  59.  
  60. If is isn't NULL, you have allocated space for yourString, and you can then
  61. assign the file name to yourString like:
  62.     strcpy(yourString,argv[N]);
  63.  
  64. Now, you can try to open the file using the fopen() function, and do your stuff.
  65. Don't forget to include lots of error checking. Write your program, and if
  66. you can't get it working post a minimal and complete compilable example of your
  67. problem. Use a good reference book such as "The C Programming Language, 2nd
  68. Edition" by Kernighan & Ritchie to get a handle on what you need to make this
  69. work. Read and study the ANSI C Library; the Library is your friend! ;p
  70.  
  71. You will learn by doing; so write some code and try to make it work.
  72.  
  73. When I raced bicycles, we had an expression which translates well for
  74. programming (with a word substitution):
  75.  
  76. "there are only 2 kinds of _programmers_,
  77.     those who have crashed && those who will."
  78.  
  79. C'ya,
  80.  
  81. gary    /* the Sorcerer's Apprentice */
  82.  
  83. Free Speech in America murdered by the Communications Decency Act.
  84.       ((U.S. Congress && Executive) == Collective Moron) == 1
  85.